package denominator.ultradns; import com.squareup.okhttp.mockwebserver.MockResponse; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.util.Collection; import java.util.List; import java.util.Map; import denominator.Credentials; import denominator.ultradns.UltraDNS.DirectionalGroup; import denominator.ultradns.UltraDNS.DirectionalRecord; import denominator.ultradns.UltraDNS.NameAndType; import denominator.ultradns.UltraDNS.NetworkStatus; import denominator.ultradns.UltraDNS.Record; import feign.Feign; import feign.codec.DecodeException; import static denominator.assertj.ModelAssertions.assertThat; import static denominator.ultradns.UltraDNSException.DIRECTIONALPOOL_NOT_FOUND; import static denominator.ultradns.UltraDNSException.DIRECTIONALPOOL_RECORD_NOT_FOUND; import static denominator.ultradns.UltraDNSException.GROUP_NOT_FOUND; import static denominator.ultradns.UltraDNSException.INVALID_ZONE_NAME; import static denominator.ultradns.UltraDNSException.POOL_ALREADY_EXISTS; import static denominator.ultradns.UltraDNSException.POOL_NOT_FOUND; import static denominator.ultradns.UltraDNSException.POOL_RECORD_ALREADY_EXISTS; import static denominator.ultradns.UltraDNSException.RESOURCE_RECORD_ALREADY_EXISTS; import static denominator.ultradns.UltraDNSException.RESOURCE_RECORD_NOT_FOUND; import static denominator.ultradns.UltraDNSException.SYSTEM_ERROR; import static java.lang.String.format; import static java.util.Arrays.asList; import static org.assertj.core.groups.Tuple.tuple; public class UltraDNSTest { @Rule public final MockUltraDNSServer server = new MockUltraDNSServer(); @Rule public final ExpectedException thrown = ExpectedException.none(); @Test public void networkGood() throws Exception { server.enqueue(new MockResponse().setBody(getNeustarNetworkStatusResponse)); assertThat(mockApi().getNeustarNetworkStatus()).isEqualTo(NetworkStatus.GOOD); server.assertSoapBody(getNeustarNetworkStatus); } @Test public void networkFailed() throws Exception { server.enqueue(new MockResponse().setBody(getNeustarNetworkStatusFailedResponse)); assertThat(mockApi().getNeustarNetworkStatus()).isEqualTo(NetworkStatus.FAILED); server.assertSoapBody(getNeustarNetworkStatus); } @Test public void retryOnSystemError() throws Exception { server.enqueueError(SYSTEM_ERROR, "System Error"); server.enqueue(new MockResponse().setBody(getNeustarNetworkStatusResponse)); assertThat(mockApi().getNeustarNetworkStatus()).isEqualTo(NetworkStatus.GOOD); server.assertSoapBody(getNeustarNetworkStatus); server.assertSoapBody(getNeustarNetworkStatus); } @Test public void noRetryOnInvalidUser() throws Exception { thrown.expect(UltraDNSException.class); thrown.expectMessage("UltraDNS#getNeustarNetworkStatus() failed: Invalid User"); server.enqueue(new MockResponse().setResponseCode(500).setBody(invalidUser)); mockApi().getNeustarNetworkStatus(); } @Test public void networkStatusCantParse() throws Exception { thrown.expect(DecodeException.class); thrown.expectMessage("Content is not allowed in prolog."); server.enqueue(new MockResponse().setBody("{\"foo\": \"bar\"}")); mockApi().getNeustarNetworkStatus(); } @Test public void accountId() throws Exception { server.enqueue(new MockResponse().setBody(getAccountsListOfUserResponse)); assertThat(mockApi().getAccountsListOfUser()).isEqualTo("AAAAAAAAAAAAAAAA"); server.assertSoapBody(getAccountsListOfUser); } @Test public void zonesOfAccountPresent() throws Exception { server.enqueue(new MockResponse().setBody(getZonesOfAccountResponsePresent)); assertThat(mockApi().getZonesOfAccount("AAAAAAAAAAAAAAAA")) .containsExactly("denominator.io."); server.assertSoapBody(getZonesOfAccount); } @Test public void zonesOfAccountAbsent() throws Exception { server.enqueue(new MockResponse().setBody(getZonesOfAccountResponseAbsent)); assertThat(mockApi().getZonesOfAccount("AAAAAAAAAAAAAAAA")).isEmpty(); server.assertSoapBody(getZonesOfAccount); } @Test public void recordsInZonePresent() throws Exception { server.enqueue(new MockResponse().setBody(getResourceRecordsOfZoneResponsePresent)); List<Record> records = mockApi().getResourceRecordsOfZone("denominator.io."); assertThat(records).extracting("id", "created") .containsExactly( tuple("0B0338C2023F7969", 1255348943000L), tuple("04023A2507B6468F", 1286038636000L) ); assertThat(records).extracting("name", "typeCode", "ttl", "rdata") .containsExactly( tuple("denominator.io.", 2, 86400, asList("pdns2.ultradns.net.")), tuple("www.denominator.io.", 1, 3600, asList("1.2.3.4")) ); server.assertSoapBody(getResourceRecordsOfZone); } @Test public void recordsInZoneAbsent() throws Exception { server.enqueue(new MockResponse().setBody(getResourceRecordsOfZoneResponseAbsent)); assertThat(mockApi().getResourceRecordsOfZone("denominator.io.")).isEmpty(); server.assertSoapBody(getResourceRecordsOfZone); } @Test public void recordsInZoneByNameAndTypePresent() throws Exception { server.enqueue(new MockResponse().setBody(getResourceRecordsOfDNameByTypeResponsePresent)); assertThat(mockApi().getResourceRecordsOfDNameByType("denominator.io.", "denominator.io.", 6)) .extracting("id", "created", "name", "typeCode", "ttl", "rdata") .contains( tuple("04053D8E57C7A22F", 1361521368000L, "denominator.io.", 6, 86400, asList( "pdns75.ultradns.com.", "adrianc.netflix.com.", "2013022200", "86400", "86400", "86400", "86400")) ); server.assertSoapBody(getResourceRecordsOfDNameByType); } @Test public void recordsInZoneByNameAndTypeAbsent() throws Exception { server.enqueue(new MockResponse().setBody(getResourceRecordsOfDNameByTypeResponseAbsent)); assertThat(mockApi().getResourceRecordsOfDNameByType("denominator.io.", "denominator.io.", 6)) .isEmpty(); server.assertSoapBody(getResourceRecordsOfDNameByType); } @Test public void recordsInZoneByNameAndTypeInvalidZone() throws Exception { thrown.expect(UltraDNSException.class); thrown.expectMessage("2507: Invalid zone name."); server.enqueueError(INVALID_ZONE_NAME, "Invalid zone name."); mockApi().getResourceRecordsOfDNameByType("ARGHH", "ARGHH", 6); } @Test public void createRecordInZone() throws Exception { server.enqueue(new MockResponse().setBody(createResourceRecordResponse)); Record record = new Record(); record.name = "mail.denominator.io."; record.typeCode = 15; record.ttl = 1800; record.rdata.add("10"); record.rdata.add("maileast.denominator.io."); mockApi().createResourceRecord(record, "denominator.io."); server.assertSoapBody(createResourceRecord); } @Test public void updateRecordInZone() throws Exception { server.enqueue(new MockResponse().setBody(updateResourceRecordResponse)); Record record = new Record(); record.id = "ABCDEF"; record.name = "www.denominator.io."; record.typeCode = 1; record.ttl = 3600; record.rdata.add("1.1.1.1"); mockApi().updateResourceRecord(record, "denominator.io."); server.assertSoapBody( "<v01:updateResourceRecord><transactionID /><resourceRecord Guid=\"ABCDEF\" ZoneName=\"denominator.io.\" Type=\"1\" DName=\"www.denominator.io.\" TTL=\"3600\"><InfoValues Info1Value=\"1.1.1.1\" /></resourceRecord></v01:updateResourceRecord>"); } @Test public void updateRecordOfRRPool() throws Exception { server.enqueue(new MockResponse().setBody(updateResourceRecordResponse)); mockApi().updateRecordOfRRPool("ABCDEF", "000000000000002", "1.1.1.1", 3600); server.assertSoapBody("<v01:updateRecordOfRRPool>\n" + " <transactionID/>\n" + " <resourceRecord TTL=\"3600\" info1Value=\"1.1.1.1\" lbPoolID=\"000000000000002\" rrGuid=\"ABCDEF\"/>\n" + "</v01:updateRecordOfRRPool>"); } /** * Granted, this doesn't make sense, but testing found update to return this error. */ @Test public void updateRecordInZoneAlreadyExists() throws Exception { thrown.expect(UltraDNSException.class); thrown.expectMessage( "2111: Resource Record of type 1 with these attributes already exists in the system."); server.enqueueError(RESOURCE_RECORD_ALREADY_EXISTS, "Resource Record of type 1 with these attributes already exists in the system."); Record record = new Record(); record.id = "ABCDEF"; record.name = "www.denominator.io."; record.typeCode = 1; record.ttl = 3600; record.rdata.add("1.1.1.1"); mockApi().updateResourceRecord(record, "denominator.io."); } @Test public void deleteRecord() throws Exception { server.enqueue(new MockResponse().setBody(deleteResourceRecordResponse)); mockApi().deleteResourceRecord("ABCDEF"); server.assertSoapBody(deleteResourceRecord); } @Test public void rrPoolNameTypeToIdInZonePresent() throws Exception { server.enqueue(new MockResponse().setBody(getLoadBalancingPoolsByZoneResponsePresent)); NameAndType one = new NameAndType(); one.name = "app-uswest1.denominator.io."; one.type = "A"; NameAndType two = new NameAndType(); two.name = "app-uswest2.denominator.io."; two.type = "A"; assertThat(mockApi().getLoadBalancingPoolsByZone("denominator.io.")) .containsEntry(one, "000000000000002") .containsEntry(two, "000000000000003"); server.assertSoapBody(getLoadBalancingPoolsByZone); } @Test public void rrPoolNameTypeToIdInZoneAbsent() throws Exception { server.enqueue(new MockResponse().setBody(getLoadBalancingPoolsByZoneResponseAbsent)); assertThat(mockApi().getLoadBalancingPoolsByZone("denominator.io.")).isEmpty(); server.assertSoapBody(getLoadBalancingPoolsByZone); } @Test public void recordsInRRPoolPresent() throws Exception { server.enqueue(new MockResponse().setBody(getRRPoolRecordsResponsePresent)); assertThat(mockApi().getRRPoolRecords("000000000000002")) .extracting("id", "created", "name", "typeCode", "ttl", "rdata") .containsExactly( tuple("0B0338C2023F7969", 1255348943000L, "denominator.io.", 2, 86400, asList( "pdns2.ultradns.net.")), tuple("04023A2507B6468F", 1286038636000L, "www.denominator.io.", 1, 3600, asList( "1.2.3.4")) ); server.assertSoapBody(getRRPoolRecords); } @Test public void recordsInRRPoolAbsent() throws Exception { server.enqueue(new MockResponse().setBody(getRRPoolRecordsResponseAbsent)); assertThat(mockApi().getRRPoolRecords("000000000000002")).isEmpty(); server.assertSoapBody(getRRPoolRecords); } @Test public void createRRPoolInZoneForNameAndType() throws Exception { server.enqueue(new MockResponse().setBody(addRRLBPoolResponse)); assertThat(mockApi().addRRLBPool("denominator.io.", "www.denominator.io.", 1)) .isEqualTo("AAAAAAAAAAAAAAAA"); server.assertSoapBody(addRRLBPool); } @Test public void createRRPoolInZoneForNameAndTypeWhenAlreadyExists() throws Exception { thrown.expect(UltraDNSException.class); thrown.expectMessage("2912: Pool already created for this host name : www.denominator.io."); server.enqueueError(POOL_ALREADY_EXISTS, "Pool already created for this host name : www.denominator.io."); mockApi().addRRLBPool("denominator.io.", "www.denominator.io.", 1); } @Test public void addRecordIntoRRPoolInZone() throws Exception { server.enqueue(new MockResponse().setBody(addRecordToRRPoolResponse)); mockApi().addRecordToRRPool(1, 300, "www1.denominator.io.", "AAAAAAAAAAAAAAAA", "denominator.io."); server.assertSoapBody(addRecordToRRPool); } @Test public void deleteRRPool() throws Exception { server.enqueue(new MockResponse().setBody(deleteLBPoolResponse)); mockApi().deleteLBPool("AAAAAAAAAAAAAAAA"); server.assertSoapBody(deleteLBPool); } @Test public void deleteRRPoolWhenPoolNotFound() throws Exception { thrown.expect(UltraDNSException.class); thrown.expectMessage("2911: Pool does not exist in the system"); server.enqueueError(POOL_NOT_FOUND, "Pool does not exist in the system"); mockApi().deleteLBPool("AAAAAAAAAAAAAAAA"); } @Test public void deleteRRPoolWhenRecordNotFound() throws Exception { thrown.expect(UltraDNSException.class); thrown.expectMessage("2103: No resource record with GUID found in the system AAAAAAAAAAAAAAAA"); server.enqueueError(RESOURCE_RECORD_NOT_FOUND, "No resource record with GUID found in the system AAAAAAAAAAAAAAAA"); mockApi().deleteLBPool("AAAAAAAAAAAAAAAA"); } @Test public void dirPoolNameToIdsInZonePresent() throws Exception { server.enqueue(new MockResponse().setBody(getDirectionalPoolsOfZoneResponsePresent)); assertThat(mockApi().getDirectionalPoolsOfZone("denominator.io.")) .containsEntry("www.denominator.io.", "D000000000000001"); server.assertSoapBody(getDirectionalPoolsOfZone); } @Test public void dirPoolNameToIdsInZoneAbsent() throws Exception { server.enqueue(new MockResponse().setBody(getDirectionalPoolsOfZoneResponseAbsent)); assertThat(mockApi().getDirectionalPoolsOfZone("denominator.io.")).isEmpty(); server.assertSoapBody(getDirectionalPoolsOfZone); } @Test public void directionalRecordsByNameAndTypePresent() throws Exception { server.enqueue(new MockResponse().setBody(getDirectionalDNSRecordsForHostResponsePresent)); List<DirectionalRecord> records = mockApi().getDirectionalDNSRecordsForHost( "denominator.io.", "www.denominator.io.", 0); assertThat(records).extracting("geoGroupId", "geoGroupName", "noResponseRecord", "id") .containsExactly( tuple("C000000000000001", "Europe", false, "A000000000000001"), tuple("C000000000000003", "Everywhere Else", false, "A000000000000003"), tuple("C000000000000002", "US", false, "A000000000000002") ); assertThat(records).extracting("type", "ttl", "rdata") .containsExactly( tuple("CNAME", 300, asList("www-000000001.eu-west-1.elb.amazonaws.com.")), tuple("CNAME", 60, asList("www-000000002.us-east-1.elb.amazonaws.com.")), tuple("CNAME", 300, asList("www-000000001.us-east-1.elb.amazonaws.com.")) ); server.assertSoapBody(getDirectionalDNSRecordsForHost); } @Test public void directionalRecordsByNameAndTypeAbsent() throws Exception { server.enqueue(new MockResponse().setBody(getDirectionalDNSRecordsForHostResponseAbsent)); assertThat( mockApi().getDirectionalDNSRecordsForHost("denominator.io.", "www.denominator.io.", 0)) .isEmpty(); server.assertSoapBody(getDirectionalDNSRecordsForHost); } @Test public void directionalRecordsByNameAndTypeWhenPoolNotFound() { thrown.expect(UltraDNSException.class); thrown.expectMessage( "2142: No Pool or Multiple pools of same type exists for the PoolName : www.denominator.io."); server.enqueueError(DIRECTIONALPOOL_NOT_FOUND, "No Pool or Multiple pools of same type exists for the PoolName : www.denominator.io."); mockApi().getDirectionalDNSRecordsForHost("denominator.io.", "www.denominator.io.", 0); } @Test public void directionalRecordsByNameAndTypeFiltersOutSourceIP() throws Exception { server.enqueue( new MockResponse().setBody(getDirectionalDNSRecordsForHostResponseFiltersOutSourceIP)); List<DirectionalRecord> records = mockApi().getDirectionalDNSRecordsForHost( "denominator.io.", "www.denominator.io.", 0); assertThat(records).extracting("geoGroupId", "geoGroupName", "noResponseRecord", "id") .containsExactly(tuple("C000000000000002", "US", false, "A000000000000002")); assertThat(records).extracting("type", "ttl", "rdata") .containsExactly(tuple("CNAME", 300, asList("www-000000001.us-east-1.elb.amazonaws.com."))); server.assertSoapBody(getDirectionalDNSRecordsForHost); } @Test public void directionalRecordsInZoneAndGroupByNameAndTypePresent() throws Exception { server.enqueue(new MockResponse().setBody(getDirectionalDNSRecordsForGroupResponsePresent)); List<DirectionalRecord> records = mockApi().getDirectionalDNSRecordsForGroup( "denominator.io.", "Europe", "www.denominator.io.", 1); assertThat(records).extracting("geoGroupId", "geoGroupName", "noResponseRecord", "id") .containsExactly(tuple("C000000000000001", "Europe", false, "A000000000000001")); assertThat(records).extracting("type", "ttl", "rdata") .containsExactly(tuple("CNAME", 300, asList("www-000000001.eu-west-1.elb.amazonaws.com."))); server.assertSoapBody(getDirectionalDNSRecordsForGroup); } @Test public void directionalRecordsInZoneAndGroupByNameAndTypeAbsent() throws Exception { server.enqueue(new MockResponse().setBody(getDirectionalDNSRecordsForGroupResponseAbsent)); assertThat(mockApi().getDirectionalDNSRecordsForGroup("denominator.io.", "Europe", "www.denominator.io.", 1)) .isEmpty(); server.assertSoapBody(getDirectionalDNSRecordsForGroup); } @Test public void directionalRecordsInZoneAndGroupByNameAndTypeWhenGroupNotFound() throws Exception { thrown.expect(UltraDNSException.class); thrown.expectMessage("4003: Group does not exist."); server.enqueueError(GROUP_NOT_FOUND, "Group does not exist."); mockApi().getDirectionalDNSRecordsForGroup("denominator.io.", "Europe", "www.denominator.io.", 1); } @Test public void createDirectionalPoolInZoneForNameAndType() throws Exception { server.enqueue(new MockResponse().setBody(addDirectionalPoolResponse)); assertThat(mockApi().addDirectionalPool("denominator.io.", "www.denominator.io.", "A")) .isEqualTo("AAAAAAAAAAAAAAAA"); server.assertSoapBody(addDirectionalPool); } @Test public void createDirectionalPoolInZoneForNameAndTypeWhenAlreadyExists() throws Exception { thrown.expect(UltraDNSException.class); thrown.expectMessage("2912: Pool already created for this host name : www.denominator.io."); server.enqueueError(POOL_ALREADY_EXISTS, "Pool already created for this host name : www.denominator.io."); mockApi().addDirectionalPool("denominator.io.", "www.denominator.io.", "A"); } @Test public void deleteDirectionalPool() throws Exception { server.enqueue(new MockResponse().setBody(deleteDirectionalPoolResponse)); mockApi().deleteDirectionalPool("AAAAAAAAAAAAAAAA"); server.assertSoapBody(deleteDirectionalPool); } @Test public void deleteDirectionalRecord() throws Exception { server.enqueue(new MockResponse().setBody(deleteDirectionalPoolRecordResponse)); mockApi().deleteDirectionalPoolRecord("00000000000"); server.assertSoapBody(deleteDirectionalPoolRecord); } @Test public void deleteDirectionalRecordNotFound() throws Exception { thrown.expect(UltraDNSException.class); thrown.expectMessage("2705: Directional Pool Record does not exist in the system"); server.enqueueError(DIRECTIONALPOOL_RECORD_NOT_FOUND, "Directional Pool Record does not exist in the system"); mockApi().deleteDirectionalPoolRecord("00000000000"); } @Test public void createDirectionalRecordAndGroupInPool() throws Exception { server.enqueue(new MockResponse().setBody(addDirectionalPoolRecordResponse)); DirectionalRecord record = new DirectionalRecord(); record.name = "mail.denominator.io."; record.type = "MX"; record.ttl = 1800; record.rdata.add("10"); record.rdata.add("maileast.denominator.io."); DirectionalGroup group = new DirectionalGroup(); group.name = "Mexas"; group.regionToTerritories.put("United States (US)", asList("Maryland", "Texas")); assertThat(mockApi().addDirectionalPoolRecord(record, group, "AAAAAAAAAAAAAAAA")) .isEqualTo("06063DC355058294"); server.assertSoapBody(addDirectionalPoolRecord); } @Test public void createDirectionalRecordAndGroupInPoolWhenExists() throws Exception { thrown.expect(UltraDNSException.class); thrown.expectMessage("4009: Resource Record already exists."); server.enqueueError(POOL_RECORD_ALREADY_EXISTS, "Resource Record already exists."); DirectionalRecord record = new DirectionalRecord(); record.name = "mail.denominator.io."; record.type = "MX"; record.ttl = 1800; record.rdata.add("10"); record.rdata.add("maileast.denominator.io."); DirectionalGroup group = new DirectionalGroup(); group.name = "Mexas"; group.regionToTerritories.put("United States (US)", asList("Maryland", "Texas")); mockApi().addDirectionalPoolRecord(record, group, "AAAAAAAAAAAAAAAA"); } @Test public void updateDirectionalRecordAndGroup() throws Exception { server.enqueue(new MockResponse().setBody(updateDirectionalPoolRecordResponse)); DirectionalRecord record = new DirectionalRecord(); record.id = "A000000000000001"; record.name = "www.denominator.io."; record.type = "CNAME"; record.ttl = 300; record.rdata.add("www-000000001.eu-west-1.elb.amazonaws.com."); DirectionalGroup group = new DirectionalGroup(); group.name = "Europe"; group.regionToTerritories.put("Europe", asList("Aland Islands")); mockApi().updateDirectionalPoolRecord(record, group); server.assertSoapBody(updateDirectionalPoolRecordRegions); } @Test public void updateDirectionalRecordAndGroupWhenExistsWithSameAttributes() throws Exception { thrown.expect(UltraDNSException.class); thrown.expectMessage( "2111: Resource Record of type CNAME with these attributes already exists in the system."); server.enqueueError(RESOURCE_RECORD_ALREADY_EXISTS, "Resource Record of type CNAME with these attributes already exists in the system."); DirectionalRecord record = new DirectionalRecord(); record.id = "ABCDEF"; record.name = "mail.denominator.io."; record.type = "MX"; record.ttl = 1800; record.rdata.add("10"); record.rdata.add("maileast.denominator.io."); DirectionalGroup group = new DirectionalGroup(); group.name = "Mexas"; group.regionToTerritories.put("United States (US)", asList("Maryland", "Texas")); mockApi().updateDirectionalPoolRecord(record, group); } @Test public void getDirectionalGroup() throws Exception { server.enqueue(new MockResponse().setBody(getDirectionalDNSGroupDetailsResponseEurope)); DirectionalGroup group = mockApi().getDirectionalDNSGroupDetails("AAAAAAAAAAAAAAAA"); assertThat(group.name).isEqualTo("Europe"); assertThat(group.regionToTerritories) .containsEntry("Europe", asList("Aland Islands", "Albania", "Andorra", "Armenia", "Austria", "Azerbaijan", "Belarus", "Belgium", "Bosnia-Herzegovina", "Bulgaria", "Croatia", "Czech Republic", "Denmark", "Estonia", "Faroe Islands", "Finland", "France", "Georgia", "Germany", "Gibraltar", "Greece", "Guernsey", "Hungary", "Iceland", "Ireland", "Isle of Man", "Italy", "Jersey", "Latvia", "Liechtenstein", "Lithuania", "Luxembourg", "Macedonia, the former Yugoslav Republic of", "Malta", "Moldova, Republic of", "Monaco", "Montenegro", "Netherlands", "Norway", "Poland", "Portugal", "Romania", "San Marino", "Serbia", "Slovakia", "Slovenia", "Spain", "Svalbard and Jan Mayen", "Sweden", "Switzerland", "Ukraine", "Undefined Europe", "United Kingdom - England, Northern Ireland, Scotland, Wales", "Vatican City")); server.assertSoapBody(getDirectionalDNSGroupDetails); } @Test public void getRegionsByIdAndName() throws Exception { server.enqueue(new MockResponse().setBody(getAvailableRegionsResponse)); Map<String, Collection<String>> group = mockApi().getAvailableRegions(); assertThat(group) .containsEntry("Anonymous Proxy (A1)", asList("Anonymous Proxy")) .containsEntry("Antarctica", asList("Antarctica", "Bouvet Island", "French Southern Territories")); server.assertSoapBody(getAvailableRegions); } UltraDNS mockApi() { UltraDNSProvider.FeignModule module = new UltraDNSProvider.FeignModule(); Feign feign = module.feign(module.logger(), module.logLevel()); return feign.newInstance(new UltraDNSTarget(new UltraDNSProvider() { @Override public String url() { return server.url(); } }, new javax.inject.Provider<Credentials>() { @Override public Credentials get() { return server.credentials(); } })); } static String getNeustarNetworkStatus = "<v01:getNeustarNetworkStatus/>"; static String getNeustarNetworkStatusResponse = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <ns1:getNeustarNetworkStatusResponse xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n" + " <NeustarNetworkStatus xmlns:ns2=\"http://schema.ultraservice.neustar.com/v01/\">Good</NeustarNetworkStatus>\n" + " </ns1:getNeustarNetworkStatusResponse>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String getNeustarNetworkStatusFailedResponse = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <ns1:getNeustarNetworkStatusResponse xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n" + " <NeustarNetworkStatus xmlns:ns2=\"http://schema.ultraservice.neustar.com/v01/\">Failed</NeustarNetworkStatus>\n" + " </ns1:getNeustarNetworkStatusResponse>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String invalidUser = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <soap:Fault>\n" + " <faultcode>soap:Client</faultcode>\n" + " <faultstring>Invalid User</faultstring>\n" + " </soap:Fault>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String getAccountsListOfUser = "<v01:getAccountsListOfUser/>"; static String getAccountsListOfUserResponse = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <ns1:getAccountsListOfUserResponse xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n" + " <AccountsList xmlns:ns2=\"http://schema.ultraservice.neustar.com/v01/\">\n" + " <ns2:AccountDetailsData accountID=\"AAAAAAAAAAAAAAAA\" accountName=\"denominator\" />\n" + " </AccountsList>\n" + " </ns1:getAccountsListOfUserResponse>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String getZonesOfAccount = "<v01:getZonesOfAccount><accountId>AAAAAAAAAAAAAAAA</accountId><zoneType>all</zoneType></v01:getZonesOfAccount>"; static String getZonesOfAccountResponseHeader = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <ns1:getZonesOfAccountResponse xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n" + " <ZoneList xmlns:ns2=\"http://schema.ultraservice.neustar.com/v01/\">\n"; static String getZonesOfAccountResponseFooter = " </ZoneList>\n" + " </ns1:getZonesOfAccountResponse>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String getZonesOfAccountResponsePresent = getZonesOfAccountResponseHeader + " <ns2:UltraZone zoneName=\"denominator.io.\" zoneType=\"1\" accountId=\"AAAAAAAAAAAAAAAA\" owner=\"EEEEEEEEEEEEEEE\" zoneId=\"0000000000000001\" dnssecStatus=\"UNSIGNED\"/>\n" + getZonesOfAccountResponseFooter; static String getZonesOfAccountResponseAbsent = getZonesOfAccountResponseHeader + getZonesOfAccountResponseFooter; static String getResourceRecordsOfZone = "<v01:getResourceRecordsOfZone><zoneName>denominator.io.</zoneName><rrType>0</rrType></v01:getResourceRecordsOfZone>"; static String getResourceRecordsOfZoneResponseHeader = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <ns1:getResourceRecordsOfZoneResponse xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n" + " <ResourceRecordList xmlns:ns2=\"http://schema.ultraservice.neustar.com/v01/\">\n"; static String getResourceRecordsOfZoneResponseFooter = " </ResourceRecordList>\n" + " </ns1:getResourceRecordsOfZoneResponse>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String getResourceRecordsOfZoneResponseAbsent = getResourceRecordsOfZoneResponseHeader + getResourceRecordsOfZoneResponseFooter; static String getResourceRecordsOfDNameByType = "<v01:getResourceRecordsOfDNameByType><zoneName>denominator.io.</zoneName><hostName>denominator.io.</hostName><rrType>6</rrType></v01:getResourceRecordsOfDNameByType>"; static String getResourceRecordsOfDNameByTypeResponseHeader = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <ns1:getResourceRecordsOfDNameByTypeResponse xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n" + " <ResourceRecordList xmlns:ns2=\"http://schema.ultraservice.neustar.com/v01/\">\n"; static String getResourceRecordsOfDNameByTypeResponseFooter = " </ResourceRecordList>\n" + " </ns1:getResourceRecordsOfDNameByTypeResponse>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String getResourceRecordsOfDNameByTypeResponsePresent = getResourceRecordsOfDNameByTypeResponseHeader + " <ns2:ResourceRecord ZoneName=\"denominator.io.\" Type=\"6\" DName=\"denominator.io.\" TTL=\"86400\" Guid=\"04053D8E57C7A22F\" ZoneId=\"03053D8E57C7A22A\" LName=\"denominator.io.\" Created=\"2013-02-22T08:22:48.000Z\" Modified=\"2013-02-22T08:22:49.000Z\">\n" + " <ns2:InfoValues Info1Value=\"pdns75.ultradns.com.\" Info2Value=\"adrianc.netflix.com.\" Info3Value=\"2013022200\" Info4Value=\"86400\" Info5Value=\"86400\" Info6Value=\"86400\" Info7Value=\"86400\" />\n" + " </ns2:ResourceRecord>\n" + getResourceRecordsOfDNameByTypeResponseFooter; static String getResourceRecordsOfDNameByTypeResponseAbsent = getResourceRecordsOfDNameByTypeResponseHeader + getResourceRecordsOfDNameByTypeResponseFooter; static String createResourceRecord = "<v01:createResourceRecord><transactionID /><resourceRecord ZoneName=\"denominator.io.\" Type=\"15\" DName=\"mail.denominator.io.\" TTL=\"1800\"><InfoValues Info1Value=\"10\" Info2Value=\"maileast.denominator.io.\" /></resourceRecord></v01:createResourceRecord>"; static String createResourceRecordResponse = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <ns1:createResourceRecordResponse xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n" + " <guid xmlns:ns2=\"http://schema.ultraservice.neustar.com/v01/\">04063D9D54C6A01F</guid>\n" + " </ns1:createResourceRecordResponse>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String updateResourceRecordResponse = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <ns1:updateResourceRecordResponse xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n" + " <result xmlns:ns2=\"http://schema.ultraservice.neustar.com/v01/\">Successful</result>\n" + " </ns1:updateResourceRecordResponse>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String deleteResourceRecord = "<v01:deleteResourceRecord><transactionID /><guid>ABCDEF</guid></v01:deleteResourceRecord>"; static String deleteResourceRecordResponse = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <ns1:deleteResourceRecordResponse xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n" + " <result xmlns:ns2=\"http://schema.ultraservice.neustar.com/v01/\">Successful</result>\n" + " </ns1:deleteResourceRecordResponse>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String getLoadBalancingPoolsByZone = "<v01:getLoadBalancingPoolsByZone><zoneName>denominator.io.</zoneName><lbPoolType>RR</lbPoolType></v01:getLoadBalancingPoolsByZone>"; static String getLoadBalancingPoolsByZoneResponseHeader = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <ns1:getLoadBalancingPoolsByZoneResponse xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n" + " <LBPoolList xmlns:ns2=\"http://schema.ultraservice.neustar.com/v01/\">\n"; static String getLoadBalancingPoolsByZoneResponseFooter = " </LBPoolList>\n" + " </ns1:getLoadBalancingPoolsByZoneResponse>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String getLoadBalancingPoolsByZoneResponseAbsent = getLoadBalancingPoolsByZoneResponseHeader + getLoadBalancingPoolsByZoneResponseFooter; static String getRRPoolRecords = "<v01:getRRPoolRecords><lbPoolId>000000000000002</lbPoolId></v01:getRRPoolRecords>"; static String getRRPoolRecordsResponseHeader = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <ns1:getRRPoolRecordsResponse xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n" + " <ResourceRecordList xmlns:ns2=\"http://schema.ultraservice.neustar.com/v01/\">\n"; static String getRRPoolRecordsResponseFooter = " </ResourceRecordList>\n" + " </ns1:getRRPoolRecordsResponse>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String getRRPoolRecordsResponseAbsent = getRRPoolRecordsResponseHeader + getRRPoolRecordsResponseFooter; static String addRRLBPool = "<v01:addRRLBPool><transactionID /><zoneName>denominator.io.</zoneName><hostName>www.denominator.io.</hostName><description>1</description><poolRecordType>1</poolRecordType><rrGUID /></v01:addRRLBPool>"; static String addRRLBPoolResponse = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <ns1:addRRLBPoolResponse xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n" + " <RRPoolID>AAAAAAAAAAAAAAAA</RRPoolID>\n" + " </ns1:addRRLBPoolResponse>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String addRecordToRRPool = "<v01:addRecordToRRPool><transactionID /><roundRobinRecord lbPoolID=\"AAAAAAAAAAAAAAAA\" info1Value=\"www1.denominator.io.\" ZoneName=\"denominator.io.\" Type=\"1\" TTL=\"300\"/></v01:addRecordToRRPool>"; static String addRecordToRRPoolResponse = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <ns1:addRecordToRRPoolResponse xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n" + " <guid>012345</guid>\n" + " </ns1:addRecordToRRPoolResponse>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String deleteLBPool = "<v01:deleteLBPool><transactionID /><lbPoolID>AAAAAAAAAAAAAAAA</lbPoolID><DeleteAll>Yes</DeleteAll><retainRecordId /></v01:deleteLBPool>"; static String deleteLBPoolResponse = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <ns1:deleteLBPoolResponse xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n" + " <result xmlns:ns2=\"http://schema.ultraservice.neustar.com/v01/\">Successful</result>\n" + " </ns1:deleteLBPoolResponse>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String getDirectionalPoolsOfZone = "<v01:getDirectionalPoolsOfZone><zoneName>denominator.io.</zoneName></v01:getDirectionalPoolsOfZone>"; static String getDirectionalPoolsOfZoneResponseHeader = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <ns1:getDirectionalPoolsOfZoneResponse xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n" + " <DirectionalPoolList xmlns:ns2=\"http://schema.ultraservice.neustar.com/v01/\">\n"; static String getDirectionalPoolsOfZoneResponseFooter = " </DirectionalPoolList>\n" + " </ns1:getDirectionalPoolsOfZoneResponse>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String getDirectionalPoolsOfZoneResponsePresent = getDirectionalPoolsOfZoneResponseHeader + " <ns2:DirectionalPoolData dirpoolid=\"D000000000000001\" Zoneid=\"Z000000000000001\" Pooldname=\"www.denominator.io.\" DirPoolType=\"GEOLOCATION\" Description=\"test with ips and cnames\" />\n" + " <ns2:DirectionalPoolData dirpoolid=\"D000000000000002\" Zoneid=\"Z000000000000001\" Pooldname=\"www2.denominator.io.\" DirPoolType=\"SOURCEIP\" Description=\"should filter out as not geo\" />\n" + getDirectionalPoolsOfZoneResponseFooter; static String getDirectionalPoolsOfZoneResponseAbsent = getDirectionalPoolsOfZoneResponseHeader + getDirectionalPoolsOfZoneResponseFooter; static String getDirectionalDNSRecordsForHostTemplate = "<v01:getDirectionalDNSRecordsForHost><zoneName>%s</zoneName><hostName>%s</hostName><poolRecordType>%s</poolRecordType></v01:getDirectionalDNSRecordsForHost>"; static String getDirectionalDNSRecordsForHost = format(getDirectionalDNSRecordsForHostTemplate, "denominator.io.", "www.denominator.io.", 0); static String getDirectionalDNSRecordsForHostIPV4 = format(getDirectionalDNSRecordsForHostTemplate, "denominator.io.", "www.denominator.io.", 1); static String getDirectionalDNSRecordsForHostIPV6 = format(getDirectionalDNSRecordsForHostTemplate, "denominator.io.", "www.denominator.io.", 28); static String getDirectionalDNSRecordsForHostResponseHeader = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <ns1:getDirectionalDNSRecordsForHostResponse xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n"; static String getDirectionalDNSRecordsForHostResponseFooter = " </ns1:getDirectionalDNSRecordsForHostResponse>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String getDirectionalDNSRecordsForHostResponsePresent = getDirectionalDNSRecordsForHostResponseHeader + " <DirectionalDNSRecordDetailList xmlns:ns2=\"http://schema.ultraservice.neustar.com/v01/\" ZoneName=\"denominator.io.\" DName=\"www.denominator.io.\">\n" + " <ns2:DirectionalDNSRecordDetail GeolocationGroupName=\"Europe\" GeolocationGroupId=\"C000000000000001\" TerritoriesCount=\"54\" DirPoolRecordId=\"A000000000000001\">\n" + " <ns2:DirectionalDNSRecord recordType=\"CNAME\" TTL=\"300\" noResponseRecord=\"false\">\n" + " <ns2:InfoValues Info1Value=\"www-000000001.eu-west-1.elb.amazonaws.com.\" />\n" + " </ns2:DirectionalDNSRecord>\n" + " </ns2:DirectionalDNSRecordDetail>\n" + " <ns2:DirectionalDNSRecordDetail GeolocationGroupName=\"US\" GeolocationGroupId=\"C000000000000002\" TerritoriesCount=\"3\" DirPoolRecordId=\"A000000000000002\">\n" + " <ns2:DirectionalDNSRecord recordType=\"CNAME\" TTL=\"300\" noResponseRecord=\"false\">\n" + " <ns2:InfoValues Info1Value=\"www-000000001.us-east-1.elb.amazonaws.com.\" />\n" + " </ns2:DirectionalDNSRecord>\n" + " </ns2:DirectionalDNSRecordDetail>\n" + " <ns2:DirectionalDNSRecordDetail GeolocationGroupName=\"Everywhere Else\" GeolocationGroupId=\"C000000000000003\" TerritoriesCount=\"323\" DirPoolRecordId=\"A000000000000003\">\n" + " <ns2:DirectionalDNSRecord recordType=\"CNAME\" TTL=\"60\" noResponseRecord=\"false\">\n" + " <ns2:InfoValues Info1Value=\"www-000000002.us-east-1.elb.amazonaws.com.\" />\n" + " </ns2:DirectionalDNSRecord>\n" + " </ns2:DirectionalDNSRecordDetail>\n" + " </DirectionalDNSRecordDetailList>\n" + getDirectionalDNSRecordsForHostResponseFooter; static String getDirectionalDNSRecordsForHostResponseAbsent = getDirectionalDNSRecordsForHostResponseHeader + getDirectionalDNSRecordsForHostResponseFooter; static String getDirectionalDNSRecordsForGroupTemplate = "<v01:getDirectionalDNSRecordsForGroup><groupName>%s</groupName><hostName>%s</hostName><zoneName>%s</zoneName><poolRecordType>%s</poolRecordType></v01:getDirectionalDNSRecordsForGroup>"; static String getDirectionalDNSRecordsForGroup = format(getDirectionalDNSRecordsForGroupTemplate, "Europe", "www.denominator.io.", "denominator.io.", 1); static String getDirectionalDNSRecordsForGroupEuropeIPV6 = format(getDirectionalDNSRecordsForGroupTemplate, "Europe", "www.denominator.io.", "denominator.io.", 28); static String getDirectionalDNSRecordsForGroupResponseHeader = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <ns1:getDirectionalDNSRecordsForGroupResponse xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n"; static String getDirectionalDNSRecordsForGroupResponseFooter = " </ns1:getDirectionalDNSRecordsForGroupResponse>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String getDirectionalDNSRecordsForGroupResponsePresent = getDirectionalDNSRecordsForGroupResponseHeader + " <DirectionalDNSRecordDetailList xmlns:ns2=\"http://schema.ultraservice.neustar.com/v01/\" ZoneName=\"denominator.io.\" DName=\"www.denominator.io.\">\n" + " <ns2:DirectionalDNSRecordDetail GeolocationGroupName=\"Europe\" GeolocationGroupId=\"C000000000000001\" TerritoriesCount=\"54\" DirPoolRecordId=\"A000000000000001\">\n" + " <ns2:DirectionalDNSRecord recordType=\"CNAME\" TTL=\"300\" noResponseRecord=\"false\">\n" + " <ns2:InfoValues Info1Value=\"www-000000001.eu-west-1.elb.amazonaws.com.\" />\n" + " </ns2:DirectionalDNSRecord>\n" + " </ns2:DirectionalDNSRecordDetail>\n" + " </DirectionalDNSRecordDetailList>\n" + getDirectionalDNSRecordsForGroupResponseFooter; static String getDirectionalDNSRecordsForGroupResponseAbsent = getDirectionalDNSRecordsForGroupResponseHeader + getDirectionalDNSRecordsForGroupResponseFooter; static String addDirectionalPool = "<v01:addDirectionalPool><transactionID /><AddDirectionalPoolData dirPoolType=\"GEOLOCATION\" poolRecordType=\"A\" zoneName=\"denominator.io.\" hostName=\"www.denominator.io.\" description=\"A\"/></v01:addDirectionalPool>"; static String addDirectionalPoolResponse = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <ns1:addDirectionalPoolResponse xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n" + " <DirPoolID>AAAAAAAAAAAAAAAA</DirPoolID>\n" + " </ns1:addDirectionalPoolResponse>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String deleteDirectionalPool = "<v01:deleteDirectionalPool><transactionID /><dirPoolID>AAAAAAAAAAAAAAAA</dirPoolID><retainRecordID /></v01:deleteDirectionalPool>"; static String deleteDirectionalPoolResponse = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <ns1:deleteDirectionalPoolResponse xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n" + " <result xmlns:ns2=\"http://schema.ultraservice.neustar.com/v01/\">Successful</result>\n" + " </ns1:deleteDirectionalPoolResponse>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String deleteDirectionalPoolRecord = "<v01:deleteDirectionalPoolRecord><transactionID /><dirPoolRecordId>00000000000</dirPoolRecordId></v01:deleteDirectionalPoolRecord>"; static String deleteDirectionalPoolRecordResponse = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <ns1:deleteDirectionalPoolRecordResponse xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n" + " <result xmlns:ns2=\"http://schema.ultraservice.neustar.com/v01/\">Successful</result>\n" + " </ns1:deleteDirectionalPoolRecordResponse>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String addDirectionalPoolRecord = "<v01:addDirectionalPoolRecord><transactionID />" + "<AddDirectionalRecordData directionalPoolId=\"AAAAAAAAAAAAAAAA\">" + "<DirectionalRecordConfiguration recordType=\"MX\" TTL=\"1800\" >" + "<InfoValues Info1Value=\"10\" Info2Value=\"maileast.denominator.io.\" />" + "</DirectionalRecordConfiguration>" + "<GeolocationGroupData><GroupData groupingType=\"DEFINE_NEW_GROUP\" />" + "<GeolocationGroupDetails groupName=\"Mexas\">" + "<GeolocationGroupDefinitionData regionName=\"United States (US)\" territoryNames=\"Maryland;Texas\" />" + "</GeolocationGroupDetails></GeolocationGroupData>" + "<forceOverlapTransfer>true</forceOverlapTransfer></AddDirectionalRecordData></v01:addDirectionalPoolRecord>"; static String addDirectionalPoolRecordResponse = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <ns1:addDirectionalPoolRecordResponse xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n" + " <DirectionalPoolRecordID xmlns:ns2=\"http://schema.ultraservice.neustar.com/v01/\">06063DC355058294</DirectionalPoolRecordID>\n" + " </ns1:addDirectionalPoolRecordResponse>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String updateDirectionalPoolRecordTemplate = "<v01:updateDirectionalPoolRecord><transactionID /><UpdateDirectionalRecordData directionalPoolRecordId=\"%s\"><DirectionalRecordConfiguration TTL=\"%s\" ><InfoValues Info1Value=\"%s\" /></DirectionalRecordConfiguration>%s</UpdateDirectionalRecordData></v01:updateDirectionalPoolRecord>"; static String updateDirectionalPoolRecordRegions = format( updateDirectionalPoolRecordTemplate, "A000000000000001", 300, "www-000000001.eu-west-1.elb.amazonaws.com.", "<GeolocationGroupDetails groupName=\"Europe\"><GeolocationGroupDefinitionData regionName=\"Europe\" territoryNames=\"Aland Islands\" /></GeolocationGroupDetails><forceOverlapTransfer>true</forceOverlapTransfer>"); static String updateDirectionalPoolRecordResponse = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <ns1:updateDirectionalPoolRecordResponse xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n" + " <result xmlns:ns2=\"http://schema.ultraservice.neustar.com/v01/\">Successful</result>\n" + " </ns1:updateDirectionalPoolRecordResponse>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String getDirectionalDNSGroupDetails = "<v01:getDirectionalDNSGroupDetails><GroupId>AAAAAAAAAAAAAAAA</GroupId></v01:getDirectionalDNSGroupDetails>"; static String getDirectionalDNSGroupDetailsResponseEurope = "<?xml version=\"1.0\"?>\n" + "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <soap:Body>\n" + " <ns1:getDirectionalDNSGroupDetailsResponseEurope xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n" + " <DirectionalDNSGroupDetail xmlns:ns2=\"http://schema.ultraservice.neustar.com/v01/\" GroupName=\"Europe\">\n" + " <ns2:DirectionalDNSRegion>\n" + " <ns2:RegionForNewGroups RegionName=\"Europe\"\n" + " TerritoryName=\"Aland Islands;Albania;Andorra;Armenia;Austria;Azerbaijan;Belarus;Belgium;Bosnia-Herzegovina;Bulgaria;Croatia;Czech Republic;Denmark;Estonia;Faroe Islands;Finland;France;Georgia;Germany;Gibraltar;Greece;Guernsey;Hungary;Iceland;Ireland;Isle of Man;Italy;Jersey;Latvia;Liechtenstein;Lithuania;Luxembourg;Macedonia, the former Yugoslav Republic of;Malta;Moldova, Republic of;Monaco;Montenegro;Netherlands;Norway;Poland;Portugal;Romania;San Marino;Serbia;Slovakia;Slovenia;Spain;Svalbard and Jan Mayen;Sweden;Switzerland;Ukraine;Undefined Europe;United Kingdom - England, Northern Ireland, Scotland, Wales;Vatican City\" />\n" + " </ns2:DirectionalDNSRegion>\n" + " </DirectionalDNSGroupDetail>\n" + " </ns1:getDirectionalDNSGroupDetailsResponseEurope>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String getAvailableRegions = "<v01:getAvailableRegions />"; static String getAvailableRegionsResponse = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + "<soap:Body>\n" + " <ns1:getAvailableRegionsResponse xmlns:ns1=\"http://webservice.api.ultra.neustar.com/v01/\">\n" + " <DirectionalDNSAvailableRegionList xmlns:ns2=\"http://schema.ultraservice.neustar.com/v01/\">\n" + " <ns2:Region TerritoryName=\"Anonymous Proxy\" RegionName=\"Anonymous Proxy (A1)\" RegionID=\"14\" />\n" + " <ns2:Region TerritoryName=\"Antarctica;Bouvet Island;French Southern Territories\" RegionName=\"Antarctica\" RegionID=\"3\" />\n" + " </DirectionalDNSAvailableRegionList>\n" + " </ns1:getAvailableRegionsResponse>\n" + " </soap:Body>\n" + "</soap:Envelope>"; static String getResourceRecordsOfZoneResponsePresent = getResourceRecordsOfZoneResponseHeader + " <ns2:ResourceRecord ZoneName=\"denominator.io.\" Type=\"1\" DName=\"www.denominator.io.\" TTL=\"3600\" Guid=\"04023A2507B6468F\" ZoneId=\"0000000000000001\" LName=\"www.denominator.io.\" Created=\"2010-10-02T16:57:16.000Z\" Modified=\"2011-09-27T23:49:21.000Z\">\n" + " <ns2:InfoValues Info1Value=\"1.2.3.4\"/>\n" + " </ns2:ResourceRecord>\n" + " <ns2:ResourceRecord ZoneName=\"denominator.io.\" Type=\"2\" DName=\"denominator.io.\" TTL=\"86400\" Guid=\"0B0338C2023F7969\" ZoneId=\"0000000000000001\" LName=\"denominator.io.\" Created=\"2009-10-12T12:02:23.000Z\" Modified=\"2009-10-12T12:02:23.000Z\">\n" + " <ns2:InfoValues Info1Value=\"pdns2.ultradns.net.\"/>\n" + " </ns2:ResourceRecord>\n" + getResourceRecordsOfZoneResponseFooter; static String getLoadBalancingPoolsByZoneResponsePresent = getLoadBalancingPoolsByZoneResponseHeader + " <ns2:LBPoolData zoneid=\"0000000000000001\">\n" + " <ns2:PoolData description=\"uswest1\" PoolId=\"000000000000002\" PoolType=\"RD\" PoolRecordType=\"A\" PoolDName=\"app-uswest1.denominator.io.\" ResponseMethod=\"RR\" />\n" + " </ns2:LBPoolData>\n" + " <ns2:LBPoolData zoneid=\"0000000000000001\">\n" + " <ns2:PoolData description=\"uswest2\" PoolId=\"000000000000003\" PoolType=\"RD\" PoolRecordType=\"A\" PoolDName=\"app-uswest2.denominator.io.\" ResponseMethod=\"RR\" />\n" + " </ns2:LBPoolData>\n" + getLoadBalancingPoolsByZoneResponseFooter; static String getRRPoolRecordsResponsePresent = getRRPoolRecordsResponseHeader + " <ns2:ResourceRecord ZoneName=\"denominator.io.\" Type=\"1\" DName=\"www.denominator.io.\" TTL=\"3600\" Guid=\"04023A2507B6468F\" ZoneId=\"0000000000000001\" LName=\"www.denominator.io.\" Created=\"2010-10-02T16:57:16.000Z\" Modified=\"2011-09-27T23:49:21.000Z\">\n" + " <ns2:InfoValues Info1Value=\"1.2.3.4\"/>\n" + " </ns2:ResourceRecord>\n" + " <ns2:ResourceRecord ZoneName=\"denominator.io.\" Type=\"2\" DName=\"denominator.io.\" TTL=\"86400\" Guid=\"0B0338C2023F7969\" ZoneId=\"0000000000000001\" LName=\"denominator.io.\" Created=\"2009-10-12T12:02:23.000Z\" Modified=\"2009-10-12T12:02:23.000Z\">\n" + " <ns2:InfoValues Info1Value=\"pdns2.ultradns.net.\"/>\n" + " </ns2:ResourceRecord>\n" + getRRPoolRecordsResponseFooter; static String getDirectionalDNSRecordsForHostResponseFiltersOutSourceIP = getDirectionalDNSRecordsForHostResponseHeader + " <DirectionalDNSRecordDetailList xmlns:ns2=\"http://schema.ultraservice.neustar.com/v01/\" ZoneName=\"denominator.io.\" DName=\"www.denominator.io.\">\n" + " <ns2:DirectionalDNSRecordDetail SourceIPGroupName=\"172.16.1.0/24\" SourceIPGroupId=\"C000000000000001\" TerritoriesCount=\"54\" DirPoolRecordId=\"A000000000000001\">\n" + " <ns2:DirectionalDNSRecord recordType=\"CNAME\" TTL=\"300\" noResponseRecord=\"false\">\n" + " <ns2:InfoValues Info1Value=\"www-000000001.eu-west-1.elb.amazonaws.com.\" />\n" + " </ns2:DirectionalDNSRecord>\n" + " </ns2:DirectionalDNSRecordDetail>\n" + " <ns2:DirectionalDNSRecordDetail GeolocationGroupName=\"US\" GeolocationGroupId=\"C000000000000002\" TerritoriesCount=\"3\" DirPoolRecordId=\"A000000000000002\">\n" + " <ns2:DirectionalDNSRecord recordType=\"CNAME\" TTL=\"300\" noResponseRecord=\"false\">\n" + " <ns2:InfoValues Info1Value=\"www-000000001.us-east-1.elb.amazonaws.com.\" />\n" + " </ns2:DirectionalDNSRecord>\n" + " </ns2:DirectionalDNSRecordDetail>\n" + " </DirectionalDNSRecordDetailList>\n" + getDirectionalDNSRecordsForHostResponseFooter; }